/**
 * <p>Title: AuthorityResource</p>
 * <p>Description: The Interface of Authority Manager and UserGroupAuthority Manager</p>
 * <p>Copyright: Shanghai Batchsight Pharmaceutical Technologies, Inc. Copyright(c) 2016</p>
 * @author Chen Wei
 * @version 1.0
 * <pre>Histroy:
 *       2016-11-30  Chen Wei  Create
 *</pre>
*/
package cn.jhg.account.rest;

import java.util.List;

import javax.ws.rs.DELETE;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;

import cn.jhg.account.entity.Authority;
import cn.jhg.account.entity.UserGroup;
import cn.jhg.account.util.ServiceResult;

@Path("/authorities")
public interface AuthorityResource {

	/**
	 * <p>新增权限</p>
	 * @param name 	权限名
	 * @param sdid 签名id
	 * @param description	权限描述
	 * @return 	权限auid 和 errorCode
	 */
    @Path("/add")
    @POST
    @Produces(MediaType.APPLICATION_JSON)
    public ServiceResult<Integer> addAuthority(@FormParam("sdid")  int sdid,
    		@FormParam("name") String name,
    		@FormParam("description") String description);
    		
    /**
     * <p>更新权限 </p>
     * @param auid			权限auid
     * @param name			权限名
     * @param sdid 			签名id
     * @param description	权限描述
     * @return				errorCode
     */
    @Path("/update")
    @PUT
    @Produces(MediaType.APPLICATION_JSON)
    public ServiceResult<Integer> updateAuthority(@FormParam("sdid")  int sdid,
    		@FormParam("id") int id,
    		@FormParam("name") String name,
    		@FormParam("description") String description);
    
    /**
     * <p>根据auid删除权限</p>
     * @param auid
     * @param sdid 签名id
     * @return errorCode
     */
	@Path("/delete")
	@DELETE
	@Produces(MediaType.APPLICATION_JSON)
	public ServiceResult<Integer> deleteAuthority(@FormParam("sdid")  int sdid,
			@FormParam("id") int id);
	
	/**
	 * <p>按权限 名称 查询权限</p>
	 * @param name	权限名称
	 * @return		权限实体
	 */
    @Path("/find/Auths")
    @GET
    @Produces({MediaType.APPLICATION_JSON, })
    public ServiceResult<List<Authority>> getAuthority(@QueryParam("name") String name);
    
	/**
	 * <p>按权限 auid 查询权限</p>
	 * @param auid	权限ID
	 * @return		权限实体
	 */
    @Path("/query")
    @GET
    @Produces({MediaType.APPLICATION_JSON, })
    public ServiceResult<Authority> queryAuthority(@QueryParam("auid") int auid);
    
    //-------------用户组的权限操作------------------
    
    /**
     * <p>给指定用户组添加权限</p>
     * @param ugid 		用户组ID
     * @param auidList	权限auid集合
     * @param sdid 		签名id
     * @return			errorCode
     */
    @Path("/addAuth")
    @POST
    @Produces(MediaType.APPLICATION_JSON)
    public ServiceResult<Integer> addUserGroupAuthority(@FormParam("sdid")  int sdid,
    		@FormParam("ugid") int ugid,
    		@FormParam("auidList") List<Integer> auidList);
    
    /**
     * <p>删除指定用户组权限</p>
     * @param ugid 		用户组ID
     * @param sdid 		签名id
     * @param auidList	权限auid集合
     * @return			errorCode
     */
    @Path("/deleteAuth")
    @DELETE
    @Produces(MediaType.APPLICATION_JSON)
    public ServiceResult<Integer> deleteUserGroupAuthority(@FormParam("sdid")  int sdid,
    		@FormParam("ugid") int ugid,
    		@FormParam("auidList") List<Integer> auidList);
    
	/**
	 * <p>按用户组 ugid 查询权限</p>
	 * @param ugid	用户组ID
	 * @return		权限auid的set集合
	 */
    @Path("/query/UgAuth")
    @GET
    @Produces({MediaType.APPLICATION_JSON, })
    public ServiceResult<List<Authority>> queryUserGroupAuthority(@QueryParam("ugid") int ugid);
    
    /**
     * <p>按用户组 ugid 查询不在指定用户组权限</p>
     * @param ugid
     * @return 权限实体的set集合
     */
    @Path("/query/exit")
    @GET
    @Produces({MediaType.APPLICATION_JSON, })
    public ServiceResult<List<Authority>> queryAuthorityExists(@QueryParam("ugid") int ugid);
    
    
	/**
	 * <p>按权限 名称 查询权限</p>
	 * @param name	权限名称
	 * @return		权限实体
	 */
    @Path("/get")
    @GET
    @Produces({MediaType.APPLICATION_JSON, })
    public String queryAuthority(@QueryParam("name") String name);
    
    /**
	 * 根据权限id获取有这个权限的用户组
	 * @param aid	权限id
	 * @return		用户组id 的List and ErrorCode
	 * 访问路径：authorities/findUserGroupByAid
	 */
   @Path("/findUserGroupByAid")
   @GET
   @Produces({MediaType.APPLICATION_JSON, })
   public ServiceResult<List<Integer>> findUserGroupByAid(@QueryParam("aid") int aid);
   
   /**
	 * 根据权限id获取有这个权限的用户组
	 * @param aid	权限id
	 * @return		用户组id 的List and ErrorCode
	 * 访问路径：authorities/findUserGroupByAid
	 */
  @Path("/findUserGroupsByAid")
  @GET
  @Produces({MediaType.APPLICATION_JSON, })
  public ServiceResult<List<UserGroup>> findUserGroupsByAid(@QueryParam("aid") int aid);
   
   /**
	 * 查询权限名字或描述中出现关键子的记录
	 * @param str	 输入为空格分隔多关键字,多关键字间为“或”关系, 查询权限名字或描述中出现关键子的记录
	 * @return	权限ID的List and ErrorCode
	 */
  @Path("/findAuthority")
  @GET
  @Produces({MediaType.APPLICATION_JSON, })
  public ServiceResult<List<Integer>> findAuthority(@QueryParam("str") String str);
  
  /**
 	 * 查询权限名字或描述中出现关键子的记录
 	 * @param str	 输入为空格分隔多关键字,多关键字间为“或”关系, 查询权限名字或描述中出现关键子的记录
 	 * @return	权限实体的List and ErrorCode
 	 */
   @Path("/findAuthorityDetail")
   @GET
   @Produces({MediaType.APPLICATION_JSON, })
   public ServiceResult<List<Authority>> findAuthorityDetail(@QueryParam("str") String str);
}
